package com.itdachang.design.behavioral.iterator;

import java.util.ArrayList;
import java.util.List;

/**
 * 抽象聚合类
 *
 * @author gcq
 * @create 2022-02-16
 */
public abstract class BeautifuMan {

    /**
     * 不方便暴露给外界的集合，只允许外界获取而不可以操作
     */
    private List<String> girlFriens = new ArrayList<>();


    /**
     * 添加女朋友
     * @param name
     */
    void likeYou(String name) {
        girlFriens.add(name);
    }

    /**
     * 离开女朋友
     * @param name
     */
    void sayBye(String name) {
        girlFriens.remove(name);
    }

    public Itr getIterator() {
        return new Iterator();
    }

    interface Itr {
        /**
         * 是否有下一个
         * @return
         */
        boolean haxNext();

        /**
         * 返回下一个
         * @return
         */
        String next();

        /**
         * 初恋
         * @return
         */
        String firstLove();

        /**
         * 现任
         * @return
         */
        String current();
    }

    /**
     * 内部迭代器
     */
    class Iterator implements Itr {
        /**
         * 当前指针
         */
        private int cursot = 0;

        @Override
        public boolean haxNext() {
            // 指针要小于集合大小
            // 集合大小为3，那下标只能访问0，1,2
            return cursot < girlFriens.size();
        }

        @Override
        public String next() {
            String s = girlFriens.get(cursot);
            cursot++;
            return s;
        }

        @Override
        public String firstLove() {
            return girlFriens.get(0);
        }

        @Override
        public String current() {
            return girlFriens.get(girlFriens.size() - 1);
        }
    }
}